home *** CD-ROM | disk | FTP | other *** search
/ Steal This CD / steal_this_cd.iso / Chapter 07 - Where the Hackers Are / virc200.exe / {app} / changes.txt < prev    next >
Text File  |  2004-01-11  |  83KB  |  1,553 lines

  1. Changes since ViRC 2.0 RC5:
  2. --- Additions ---
  3. * You can now select all text in the input box with Ctrl+A.
  4. * The script editor's event properties page now has a button
  5.   to select from some common event masks. Click it to see a
  6.   popup menu of the different event templates, then fill in
  7.   the blanks to create a mask for your event. The templates
  8.   are read from the file "eventmasks.ini" in your script path.
  9. * You can ignore or unignore users from the nick list popup.
  10. * New alias: /squery <service> <message>
  11. * New function: $IsIgnoringNick(nick)
  12. * The tab bar has been moved to a binary plugin, vp_tabbar.bpl.
  13.   This will allow the tab bar to be replaced in the future, but
  14.   some of the tab bar configuration settings have been disabled
  15.   in this version. The tab bar configuration will be working
  16.   again soon, in a different form. Please be patient.
  17. * A mouse gestures plugin (beta) is now included,
  18.   vp_gestures.bpl. If you chose to install it but now want to
  19.   uninstall it, either delete the file or move it to another
  20.   folder.
  21. --- Changed features ---
  22. * <OnDCCFinished> events now receive an error number of -1 and
  23.   a message of "Cancelled remotely" when the remote end closes
  24.   any DCC chat, or when the remote end closes a DCC file
  25.   transfer that hasn't yet completed.
  26. * New events that you create in the script editor now start
  27.   out as "after" events.
  28. * /wall only sends to 9 nicks at once.
  29. * VSInterp OLE Automation updates:
  30.   - External apps can now pass interface pointers to OVS
  31.     dispatch objects. The interface will be assigned an object
  32.     handle for the duration of the method call, then unmapped.
  33.   - The GetInterface() function now returns the actual IDispatch
  34.     interface for mapped OLE interfaces, instead of an OVS
  35.     wrapper.
  36.   - OVS objects can now be passed to OLE Automation methods.
  37.     A wrapper will be created automatically, just as with
  38.     GetInterface().
  39. * The active nicks popup and hyperlink popups are now
  40.   initialized in an OnStart event instead of in virc.lib's
  41.   footer. This means you can merge items into the nick list
  42.   popup from an add-on script, and they will appear when you
  43.   right-click an active nick in the output pane (after
  44.   restarting ViRC).
  45. --- Bug fixes ---
  46. * Fixed a wildcard bug where "v% *" wouldn't match "v foo".
  47.   (The bug occurred when % matched an empty string and was
  48.   followed by a space in the pattern.)
  49. * The hyperlink popup appears for URLs in the status window.
  50. * URLs surrounded by certain attribute codes are parsed
  51.   correctly.
  52. * Popup menu items for active nicks (and active servers, etc.)
  53.   now work correctly in the status window. Note that channel-
  54.   specific items like Op and Kick won't work as expected since
  55.   there's no channel, even though they aren't grayed out.
  56. * The ident server now returns the ports in the correct order.
  57. * SetEventLine now updates $nick, $user, and $host for the
  58.   following events.
  59. * -before and -after events run in the correct order (highest
  60.   to lowest priority).
  61. * $var++ and $var-- correctly update the variable on all
  62.   servers.
  63. * Wallpaper and window backgrounds are reloaded when you click
  64.   OK in the configuration window.
  65. * VSInterp: Fixed an obscure issue involving script access to
  66.   methods and properties of COM objects (FuncDesc was released
  67.   twice).
  68. * DCC Resume works when the sender is using mIRC 6.1+.
  69. * Fixed a scrolling bug for output windows with less than a
  70.   whole page to show.
  71. * Fixed a server list saving bug.
  72.  
  73. Changes since ViRC 2.0 RC4:
  74. --- Additions ---
  75. * Toolbar items can now have hotkeys. Put a clause like
  76.   "hotkey Ctrl+X" after the item name in the toolbar block.
  77. * The timestamp and logging toggle buttons are now bound to
  78.   F5 and F6, respectively.
  79. * Channels and query windows are now "deferred" until you stop
  80.   typing for a second. They won't appear or receive focus until
  81.   you stop; but they can still be accessed by scripts, and they
  82.   show up on the window tab bar. This feature can be controlled
  83.   with two new options on the initial setup page: "Don't pop up
  84.   windows while I'm typing" and "Wait at least ____ ms after a
  85.   keypress".
  86.  
  87.   The Query command will allow the new window to be deferred
  88.   if you specify the -defer flag:  /query -defer Mr2001
  89.   Otherwise, it will be shown immediately as before. TextOut and
  90.   TextOutBitmap always allow query windows to be deferred if they
  91.   have to be created to show the text.
  92. * New option: "Horizontal window tabs when docked to side". This
  93.   prevents the buttons from rotating when the tab bar is docked
  94.   to the left or right.
  95. * If "Alt+Number to switch windows" is enabled, the tab icons now
  96.   change to numbers when the Alt key is held down.
  97. * Added support for Undernet's 338 numeric, which gives the real
  98.   user@host and IP address for users with the +x mode.
  99. * New "Goto URL in new window" option on the hyperlink popup
  100.   menu. This uses Exec to start IE.
  101. * New attribute code for fixed-width fonts: ASCII 17, Ctrl+F in
  102.   the command line, or \f in scripts. This is compatible with
  103.   Pirch's fixed width code. ViRC.lib now displays the server MOTD
  104.   in fixed-width so ASCII art will look right.
  105. * New function: $IsHidden(<window>)
  106. * New command: Activate <window>
  107. * New named events:
  108.     <OnHiliteWindow*
  109.       fired whenever new text causes an inactive window's tab to
  110.       be highlighted. $0 is the window class (TServerForm,
  111.       TChannelForm, TQueryForm, or TDCCChatForm) and $1 is the
  112.       window's unique name.
  113.     <OnDestroyWindow*
  114.       the opposite of OnCreateWindow, fired just before a window
  115.       is destroyed. the parameters are the same as
  116.       OnCreateWindow: $0 is the class, $1 is the (possibly non-
  117.       unique) name, and $2 is the unique name for DCC chats.
  118. --- Changed features ---
  119. * ViRC.lib's 330 numeric event now takes the account name from $4
  120.   instead of $7.
  121. * The Directory, Drive, and FileName properties are now available
  122.   (where appropriate) for TDirectoryListBox, TFileListBox, and
  123.   TDriveComboBox.
  124. * Many new icons, thanks to Axel from Italy!
  125. --- Bug fixes ---
  126. * The "ban nick change" message is evaluated correctly.
  127. * The keepalive timer in virc.lib no longer resets $idletime().
  128. * The FlashWindowEx system call is now imported from user32.dll at
  129.   runtime, allowing ViRC to run on Win95 systems (where
  130.   FlashWindowEx doesn't exist).
  131. * Nick list flags other than o/h/v are now applied correctly in
  132.   all cases.
  133. * Old alias hotkeys are correctly unbound when rehashing.
  134. * NLSetCustomOne parses the channel correctly, and works when
  135.   called from a non-channel window.
  136. * The nick list selection no longer changes when the nick list
  137.   contents change.
  138. * Fixed the hints for the "Show/hide status window" menu items.
  139. * Fixed a DCC bug when the nick in a DCC ACCEPT or RESUME message
  140.   didn't exactly match your own nick. This bug caused problems when
  141.   resuming files sent by some XDCC bots.
  142. * The character set of the main font and nick list font are now
  143.   saved correctly. Font description strings (such as returned by
  144.   $GetSetting()) now include "C#123" as the last parameter, where
  145.   123 is the Windows character set number, if the character set
  146.   has been changed from the default.
  147. * Fixed an error appearing when using /rehash if the local script
  148.   has been unset.
  149. * Table columns that have grown to fit wide text (e.g. long nicknames)
  150.   will now shrink to their previous size when the wide text has
  151.   scrolled off the end of the buffer.
  152. * The output from /unignore is fixed.
  153. * The window name is now correct in OnCreateWindow for DCC
  154.   whiteboards.
  155. --- Translation changes ---
  156. * Message library version 3.
  157. * Added messages:
  158.   - Msg_Rpl_WhoisRealHost, for the 338 numeric event.
  159.   - Msg_Active_GotoLinkCaption, Msg_Active_CopyLinkCaption,
  160.     Msg_Active_LinkNewCaption, and Msg_Active_LinkNewHint, for the
  161.     hyperlink popup menu
  162.  
  163. Changes since ViRC 2.0rc3:
  164. --- Additions ---
  165. * ViRC.lib recognizes the 330 numeric, returned by /whois on some
  166.   networks if the user is logged into the network services.
  167. * Tab completion now works in server, query, and DCC chat windows.
  168.   You can cycle backwards through the completions by pressing
  169.   Shift+Tab. You can also use completion for command and alias names
  170.   preceded by a slash: /ct<tab> changes to /CTCP. In channel
  171.   windows, nicknames will be highlighted as they're completed.
  172. * New OVS classes: TDriveComboBox, TDirectoryListBox, TFileListBox,
  173.   TFilterComboBox.
  174. * New extended With..EndWith syntax. First install a handler:
  175.     ExtendWith <handler_name> [<flagset>] = <command>
  176.   Then invoke it:
  177.     With > <handler_name> [<parameters>]
  178.       <block>
  179.     EndWith
  180.   The <command> will be called with <parameters>, and the content of
  181.   <block> will be available through a TStringList object, $__Block__.
  182.   <flagset> is a set (surrounded by square brackets) of these
  183.   possible values:
  184.     xwEvalParams - evaluate <parameters>
  185.     xwEvalBlock - evaluate each line of $__Block__ before invoking
  186.       the command
  187.     xwNewContext - run <command> in its own local variable namespace
  188.       instead of the same one where With..EndWith was used
  189.   If <flagset> is omitted, the default value is [xwEvalParams].
  190. * OVS objects can be accessed through OLE Automation by using the
  191.   IVSSprout::GetInterface method (see vircole.txt). This allows other
  192.   applications and Language..EndLanguage blocks to control objects
  193.   created by scripts. For example:
  194.      Language VBScript
  195.        Set mainform = VisualIRC.GlobalInterpreter.GetInterface(0)
  196.        mainform.Caption = "This is a new main form caption"
  197.      EndLanguage
  198.   Please note: When one of your objects' methods is called through
  199.   OLE, the parameters will be quoted as list items. See vircole.txt
  200.   for more tips on writing classes that can be called through OLE.
  201. * OLE Automation interfaces can be mapped as OVS objects. See
  202.   vircole.txt for full details. Quick notes:
  203.   - OLE interfaces can be mapped one of two ways. (1) Another
  204.     program, or your script in a Language block, can call
  205.     IVSSprout::MapInterface. (2) You can create a new COM object
  206.     with the $NewComObject() function, given its CLSID, as long as
  207.     the object supports IDispatch.
  208.   - The handle 1 is automatically mapped to an instance of
  209.     IVisualIRC, the same interface available to Language blocks as
  210.     "VisualIRC".
  211.   - If $obj is an OLE interface, $ClassOf($obj) returns "IDispatch"
  212.     and $ParentClassOf($obj) returns "IUnknown".
  213.   - Indexed properties can be used by surrounding the index(es) with
  214.     square brackets after the property name: $prop(1.Servers [4])
  215.   - All parameters to an OLE method, including parameters for an
  216.     indexed property, must be individually quoted as list items.
  217. * You can now send DDE commands to ViRC by poking data as well as by
  218.   executing a macro (for compatibility with programs written for
  219.   other IRC clients). Use the topic 'command' and the item name
  220.   'IRC_Command'. See vircdde.txt for details.
  221. * Increased $ovsversion to 9 because of the new OLE support.
  222. * New 'Parse List' statement, just like 'Parse Extended' but it
  223.   cleans up the list first and strips quotes from the single items
  224.   ($1 is the second item without quotes, $1- is the second item
  225.   and all following items including quotes). Example:
  226.     @l $list = "albert bill" charlie "dave evan"
  227.     Parse List $list
  228.       // displays: albert bill
  229.       MessageBox $0
  230.  
  231.       // displays: charlie "dave evan"
  232.       MessageBox $1-
  233.     EndParse
  234. * ViRC will create a temporary server entry when you connect to
  235.   a server that sends its capabilities in the 005 numeric. The
  236.   temporary entry will not be saved to disk by default. If you
  237.   want to keep it, you can open the server manager and move it
  238.   to a network.
  239. * The OnCloseQuery event of forms can be used to prevent the form
  240.   from closing. Use '@L $CanClose = 0' in the event handler if
  241.   the form shouldn't be closed.
  242. * TTrayIcon (e.g. $MapObject(!Main:TrayIcon)) has two more
  243.   properties: Flashing (Boolean) and FlashTime (Integer). When
  244.   Flashing is True, the tray icon will flash every FlashTime ms.
  245. * New function: $IsAppActive() returns 1 if ViRC is the active
  246.   program.
  247. * New command: FlashTaskbar [mode]. Mode can be "on" (or 1) to
  248.   highlight ViRC's taskbar button, "off" (or 0) to un-highlight
  249.   it, or "auto" to highlight it until ViRC becomes the active
  250.   program. ("off" may not work correctly due to Windows API bugs.)
  251. * New ViRC.lib script settings to flash the taskbar and/or tray
  252.   icon when new messages arrive and ViRC is in the background.
  253. * The "text windows" configuration page now contains a nick list
  254.   color/style editor.
  255. * The nick list can now display your channel background image.
  256. * ViRC.lib automatically sets up the smileys.vsc and sounds.vsc
  257.   add-ons for first-time users, as well as winamp.vsc if Winamp
  258.   is running when ViRC is started.
  259. * TTreeView is now accessible from OVS (as well as TTreeNodes
  260.   and TTreeNode). Most properties and events are supported.
  261. --- Changed features ---
  262. * Nicklist flag colors are now saved in color scheme files.
  263. * English messages from ViRC.lib and toolbars.vsc have been moved
  264.   into english.lib to facilitate translation. You can use
  265.   english.lib as a base for translating ViRC.lib's messages into
  266.   other languages.
  267. * Relative path names can be used in embedded TextOut bitmaps
  268.   (\S@bmp:smile.bmp:alt text\S) and script link bitmaps
  269.   (\S@slbmp:smile.bmp:command:alt text\S).
  270. * The channel list window is no longer modal. You can select
  271.   another window while the list is open, then switch back by
  272.   clicking the channel list's window tab.
  273. * The error message displayed when you try to change your nick
  274.   while banned/gagged on a channel now shows the channel name.
  275. * Some configuration pages have been re-arranged.
  276. * Color names are now more friendly on the "text windows"
  277.   configuration.
  278. * ViRC.lib now fires <OnCreateStatusWindow* events after creating
  279.   the status window, to allow other scripts to change the
  280.   appearance of the status window and its popup. $0 is the object
  281.   handle of the window itself (TMonkeyScroller) and $1 is the
  282.   popup menu (TPopupMenu).
  283. * The script editor appears much more quickly when using the
  284.   '-editscript filename.vsc' command line option.
  285. * The top-level code in a script (header/footer) can examine $2
  286.   to find out whether this is the user's first time running ViRC.
  287.   $2 will contain "firstrun" if so.
  288. * As a precaution, the built-in script editor no longer allows
  289.   you to save the file if any code was lost during loading.
  290.   The warning message explains that you must edit the file with
  291.   a text editor.
  292. --- Bug fixes ---
  293. * Fixed the channel control's topic length indicator not updating.
  294. * Updated to ThemeManager 1.9. Among other things, this fixes
  295.   sab0tage's channel control script causing errors when you close
  296.   ViRC after opening the channel control form.
  297. * Text should now wrap correctly on multi-byte character systems.
  298. * $ListSearchReplace() works correctly with items that contain
  299.   spaces.
  300. * Menu item bitmaps appear correctly for toolbar dropdown menus,
  301.   the /wwho right-click menu, and menus creates with
  302.   TMenu.LoadFromMenuTree.
  303. * $IdleTime() is no longer reset by server pings.
  304. * The toolbar selection popup no longer appears when right-clicking
  305.   the drawing in a whiteboard window.
  306. * Continuous backgrounds line up with the wallpaper when toolbars
  307.   are docked to the left side.
  308. * TDCC transfers are correctly recognized as TDCC when the filename
  309.   includes a space.
  310. * $URLEncode() and $URLDecode() now translate a space to %20 instead
  311.   of '+'.
  312. * The "don't tell me about this version again" check box setting in
  313.   the update checker is saved correctly.
  314. * The font change dialog boxes no longer show checkboxes for strike
  315.   out, underline, or color. The main font dialog box no longer lets
  316.   you change the font style to bold or italic (since channel text
  317.   always appear with regular style anyway).
  318. * Script links now work in the status window.
  319. --- Translation changes ---
  320. * Message library version 2.
  321. * Msg_BanNickChange can now use $$chanstr for the name of the
  322.   channel that prevents a nick change.
  323. * Added messages: Msg_SS_flashtray and Msg_SS_flashtaskbar, the
  324.   captions of the script settings to flash the tray/taskbar when
  325.   a new message is received while ViRC is inactive.
  326.  
  327. Changes since ViRC 2.0rc2:
  328. --- Additions ---
  329. * /chatops and /globops aliases in virc.lib, for IRCops on DALnet
  330.   based servers.
  331. * New command: Randomize - Re-seeds the $rand() function.
  332. * You can now add more than one add-on script at a time.
  333. * New function: $NickCase(text) - Returns text in uppercase, with
  334.   [\] changed to {|}. This is good for storing nicknames in an array.
  335. * New functions: $SelectedNick(channel) and $SelectedNickList(channel).
  336. * The toolbar popup menu now appears when you right-click ViRC's
  337.   background.
  338. * New 'lock toolbars' on toolbar popup menus.
  339. * The position of the nick list resizer is stored for channel windows.
  340. * Stored window positions will be deleted after you haven't joined
  341.   the channel for two weeks. Imported window positions from rc2 will
  342.   be deleted after one week (unless you rejoin them before then).
  343. * New commands: Delay [timername] interval command, MDelay [timername]
  344.   interval command, UnDelay timername. Equivalent to Timer, MTimer,
  345.   and UnTimer, except that the number of repeats is always 1.
  346. * New colorful nicklist. Commands and functions: NLAddFlag, NLDelFlag,
  347.   NLPrec, NLNamesMark, NLColor, NLStyle, NLPrefix, NLSuffix, NLBitmap,
  348.   NLFlags/$NLFlags(), $NLFlagInfo(), $NLHasFlag(), NLChFlags,
  349.   $NLGetFlags(), NLSetCustomOne, NLSetCustomAll, $NLGetCustomOne(),
  350.   $NLGetCustomAll(), NLDelCustomOne, NLDelCustomAll, NLConfig,
  351.   $NLConfig().
  352. * Nick list configuration options: "Enhanced nick list" and
  353.   "Show all prefixes".
  354. * ViRC.lib will automatically add any new nick list flags when you
  355.   connect to servers that send a "PREFIX" option.
  356. * New mappable forms: !ChannelList, !EditChatFile, !EventOptions,
  357.   !AutoUpdate, !ImportSettings, !KPalette, !MenuTreeOptions,
  358.   !PenWidth, !DCCResume, !XportServers, !SetupWizard, !Splash,
  359.   !Uninstall, !WWho
  360. * $GetDCCInfo() can accept a DCC chat or whiteboard window name
  361.   instead of a DCC entry id: $GetDCCInfo(=Mr2001 remoteaddr)
  362. * New OVS class: $new(TMessageDialog <message> <type> <buttons>)
  363.     type - mtWarning, mtError, mtInformation, mtConfirmation,
  364.            mtCustom
  365.     buttons - set of [mbYes,mbNo,mbOK,mbCancel,mbAbort,mbRetry,
  366.               mbIgnore,mbAll,mbNoToAll,mbYesToAll,mbHelp] (no spaces!)
  367.   To create a message dialog and show it later, use code like this:
  368.     @ $sure_dialog = $new(TMessageDialog Are you sure? mtConfirmation [mbYes,mbNo])
  369.     ...
  370.     @l $result = $sure_dialog.ShowModal()
  371.   The return value of ShowModal() is the same as the return value
  372.   from $MessageDlg(). You can set the dialog's ModalResult property
  373.   to a nonzero value to close the dialog without user input
  374.   (e.g. from a timer).
  375. --- Changed features ---
  376. * You can select more than one file in the DCC send dialog box.
  377. * $nicklist(), $oplist(), $peonlist(), etc. now quote the nicks as
  378.   list items, so nicks with \\ in them will work correctly. (They were
  379.   previously separated by spaces but not quoted. You can use
  380.   $ListJoin() to change them back.)
  381. * $StrTrim() now removes leading spaces before the colon.
  382. * Closing the channel list before it's finished searching will
  383.   send a 'LIST STOP' to the server (when server-side searching is
  384.   enabled).
  385. * The number of repeats is now optional for /timer and /mtimer. If you
  386.   leave it out, it defaults to 0 (infinite repeats).
  387. * Added COM, PIF, DOC, XLS, and SHS to the default "dangerous file
  388.   extensions" list.
  389. * $listquote() now prefers to use angle brackets instead of quotes.
  390. * DCC chat popups now receive the unique DCC window name as $C and $2.
  391. --- Bug fixes ---
  392. * smileys.vsc won't replace smileys that occur inside a word, like
  393.   "Fserve trigger:(!foo) Queue:(3 of 3)"
  394. * Leaving the server selection box empty when you have no default
  395.   server won't cause problems.
  396. * Alt+Number switching should work correctly with non-US keyboards.
  397.   ViRC now checks whether you are holding down Ctrl at the same time,
  398.   since AltGr is supposed to send left Ctrl + right Alt. On a US
  399.   keyboard, you should be able to use either Alt key to switch windows.
  400. * AbortEvents won't display the raw server line.
  401. * The master script browse button in configuration works relative to
  402.   the script path.
  403. * Fixed an array bug - @ $x = y, where $x has previously been used as
  404.   an array, should work correctly.
  405. * Min and Restore work as expected when 'minimize to tray' is enabled.
  406. * A space is only copied to the clipboard for table columns when it's
  407.   after the beginning of the line.
  408. * Duplicate nicks are no longer added to the notify list.
  409. * After double clicking the tab bar to hide a window, the next highest
  410.   window will be activated.
  411. * Fixed an EConvertError during auto-reconnection.
  412. * Fixed an error when loading files into the script editor.
  413. * Fixed "view log" popup menu item.
  414. * Fixed a couple stability issues from RC2.
  415. * Fixed IAL expiration.
  416. * Fixed $upeval().
  417. * Fixed changing events on objects that are mapped more than once.
  418. * Fixed errors when opening the script editor when the script path is
  419.   not the current directory.
  420. * The Undo/Copy/Paste popup menu is back for input panes.
  421. * Most forms are now loaded as they are needed, reducing initial
  422.   memory usage and decreasing startup time.
  423. * Built-in forms that haven't been loaded will be loaded when they
  424.   are mapped with $MapObject(), instead of returning -1.
  425. * The 'GetMenuTreeList' method of TStrings lists user-defined
  426.   menu trees.
  427. ? Fixed script editor not saving to correct file if directory has been
  428.   changed.
  429. * Channel control window: Halfops can change topic. Peons can read and
  430.   copy the topic even if they can't change it.
  431.  
  432. Changes since ViRC 2.0rc1:
  433. --- Additions ---
  434. * Event options to run before/after other events, use variables in
  435.   the activation mask, and more. New event definition syntax:
  436.     Event <name> [-before|-after] [-eval] [-exact] [-case] [-regexp] "<mask>"
  437.       <code>
  438.     EndEvent
  439.   -before: the event will run before the event's message is displayed
  440.     (either internally or by a priority-matching event). all matching
  441.     'before' events will be run in the opposite order they were added
  442.     (that is, newest first), unless one of them calls FallThrough,
  443.     which will skip all remaining 'before' events.
  444.   -after: just like -before, but runs after the message. the order is
  445.     still newest first. this shouldn't be combined with -before.
  446.   -eval: the mask will be evaluated when it is being matched against
  447.     a server line (caution: if you put a function call in the event
  448.     mask, the function will be called A LOT). use this to match your
  449.     current nick, for example, instead of the nick you had when the
  450.     event was defined.
  451.   -exact: the mask will have to match the entire server line. that is,
  452.     "% JOIN" will not match ":Mr2001 JOIN #virc" if -exact is used.
  453.     also, the event mask won't be evaluated when the event is set,
  454.     although it will still be evaluated at match time if -eval is used.
  455.   -case: the mask will be case-sensitive.
  456.   -regexp: the mask is a unix-style "regular expression" rather than
  457.     a $wildmatch() mask. any subexpressions enclosed in parentheses
  458.     will be available to the event handler in the $matches array:
  459.     the mask ":\w+ PRIVMSG (#\w+) :(.*)" will put the channel name in
  460.     $matches[1] and the message in $matches[2]. the mask will not be
  461.     evaluated when it is set, since some regexp syntax collides with
  462.     ViRC's attribute codes.
  463. * New commands: 'SetEventLine <text>' and 'AbortEvents'. SetEventLine
  464.   lets an earlier event change the parameters that will be given to
  465.   later events. AbortEvents stops event processing after the current
  466.   event finishes. For example, to ignore all /msgs from Mr2001, and
  467.   change everything LuceNT says to uppercase:
  468.     Event PRIVMSG_test -before "% PRIVMSG"
  469.       if [$nick] == [Mr2001]
  470.         AbortEvents
  471.       else if [$nick] == [LuceNT]
  472.         SetEventLine $0 $1 $2 :$upper($strtrim($3-))
  473.       endif
  474.     EndEvent
  475. * New function: $upeval(<text>) evaluates the text in the previous
  476.   local variable context, so a called alias can access its caller's
  477.   local variables. (This is used by @e+ and @e-.) For example:
  478.     Alias FOO
  479.       @l $secretnumber = 17
  480.       Bar
  481.     EndAlias
  482.     Alias BAR
  483.       MessageBox The secret number is $upeval($$secretnumber).
  484.     EndAlias
  485. * New OVS event utilities (in virc.lib):
  486.     // add an event handler to an object. any existing handlers will
  487.     // still run, but this will replace an existing handler with the
  488.     // same ID (first_box).
  489.     @e+ $button.OnClick = first_box, MessageBox You clicked the button!
  490.  
  491.     // add another, now both boxes will appear when you click it
  492.     @e+ $button.OnClick = second_box, MessageBox You clicked at $time()
  493.  
  494.     // remove the first handler
  495.     @e- $button.OnClick = first_box
  496.  
  497.     // list all handlers
  498.     foreach ($id,$code; $eventhandlers($button.OnClick))
  499.       MessageBox handler "$id" runs "$code"
  500.     endforeach
  501. * The server list can now be mapped as !ServerList.
  502. * CTCP SOUND support is now included as an add-on script, sounds.vsc.
  503. * '@ ${foo} = bar', '-@ ${foo}', etc. are supported.
  504. * https:// and irc:// URLs are highlighted.
  505. * New function: $replace(<text> <from1> <to1> [<from2> <to2>...])
  506.   returns the text after replacing each "from" string with the
  507.   corresponding "to" string. All parameters must be quoted as list
  508.   items, and they are case sensitive. The replacement is done on a
  509.   single pass through <text>, so $replace(ABC A X X Z) will return
  510.   "XBC", not "ZBC". $replace(ABCD A foo ABC bar) will return "fooBCD",
  511.   not "barD", because the leftmost from/to pairs are replaced first.
  512. * Inline graphics for text windows: \S@bmp:filename[:alt text]\S
  513.  
  514.   If supplied, the alt text will be copied to the clipboard when the
  515.   graphic is selected. You can also make a graphical script link:
  516.     \S@slbmp:command:filename[:alt text]\S
  517.  
  518.   <filename> can be either a FULL PATH to the bmp file, or a bitmap
  519.   handle returned by $bitmap(filename.bmp). ViRC will automatically
  520.   look in your image path if you use $bitmap(filename.bmp).
  521. * Tables for text windows. These are basically like custom tab stops;
  522.   there are separate commands to create a table definition, select
  523.   an active table, and move to the next column within a line of text.
  524.   All the commands are used by outputting them to a text control, so
  525.   tables should be defined in <OnCreateWindow>, not <OnStart>.
  526.  
  527.     define (or redefine) a table: \S@td:<name>:<col1>[:<col2>:...]\S
  528.       - Name must be a single word. A table only has to be defined
  529.         once, then it can be used in any window. Each <colN> sets
  530.         the width of a column; it can specify pixels ('50px'),
  531.         characters ('25ch'), or let ViRC choose a size ('?'). The
  532.         /f flag ('50px/f', '25ch/f') tells ViRC not to resize the
  533.         column, even if some text won't fit.
  534.  
  535.     (re)define a wrappable table: \S@td/w:<name>:<col1>[:<col2>:...]\S
  536.       - Just like regular @td, but text shown with a wrappable table
  537.         is allowed to wrap to the next line.
  538.  
  539.     select a table for one line: \S@uset:<name>\S
  540.       - This must appear at the beginning of the line. The named
  541.         table definition will be used for this line only.
  542.  
  543.     select a table for several lines: \S@pusht:<name>\S
  544.       - The named table will be added to the top of the "table stack",
  545.         and it will be active until it is removed with @popt. Each
  546.         window has its own table stack.
  547.  
  548.     display text with columns: \S@col\S<some text>
  549.       - Moves to the next table column before displaying the text.
  550.         The previous column may be resized if it wasn't defined with
  551.         /f and if the text that has already been displayed is wider
  552.         than the column's original size.
  553.  
  554.     unselect a table: \S@popt\S
  555.       - Removes the most recently selected table from the stack.
  556.  
  557.     unselect all tables: \S@popt/a\S
  558.       - Clears the table stack. When the stack is empty, the default
  559.         table (set with @setdeft) will be used.
  560.  
  561.     set a default table: \S@setdeft:<name>\S
  562.       - Sets the named table as the default table, so it will be
  563.         active whenever the table stack is empty. ViRC.lib uses a
  564.         default table to line up nicks, so you should only change
  565.         the default table if you know exactly what you're doing.
  566.  
  567. * New function: $GetTimerServer(<timer name>) returns the ID of the
  568.   server that the timer is associated with, or -1 if not found.
  569. * The script editor has buttons for event options and menu tree
  570.   merge options. If your script uses MergeMenu and you want the script
  571.   editor to recognize it, rename the source tree to the destination
  572.   tree's name followed by __MERGE (e.g., MT_MAINMENU__MERGE), then
  573.   move the MergeMenu line immediately after the last MenuItem for
  574.   the tree.
  575. * ViRC will be drawn with themes under Windows XP.
  576. * New included scripts: sounds.vsc (handles CTCP SOUND) and
  577.   smileys.vsc (shows graphical smileys).
  578. * ViRC.exe now includes 48x48 icons.
  579. * New exception handling for scripts. Now you can catch errors that
  580.   come up when working with files or OVS:
  581.  
  582.     Try
  583.       @l $filename = $?="Enter a filename"
  584.       $stringlist.LoadFromFile $filename
  585.     Except
  586.       if [$ExceptClass] == [EInOutError]
  587.         MessageBox I/O error prevented me from loading the file: $ExceptMsg
  588.       else
  589.         MessageBox Unexpected exception: $ExceptClass was raised at $ExceptAddr ($ExceptMsg)
  590.       endif
  591.     EndTry
  592.  
  593.   Use a 'finally' part to run some code whether an exception was
  594.   raised or not. You can omit the 'finally' or 'except' part, or both
  595.   (to ignore all exceptions).
  596.  
  597.     @l $cur_dir = $GetCurrentDir()
  598.     Try
  599.       ChDir $getpath()
  600.       MkDir $?="Enter a new directory name"
  601.     Finally
  602.       ChDir $cur_dir
  603.     Except
  604.       MessageBox Couldn't make new directory: $ExceptMsg
  605.     EndTry
  606.  
  607.   In an 'except' part, you can reraise the exception, so it
  608.   will be caught by an outer Try..EndTry statement, with the Raise
  609.   statement. Or you can raise your own exceptions at any time:
  610.  
  611.     Alias OUTER
  612.       // ignore any exception that occurs in Inner1
  613.       Try
  614.         Inner1
  615.       EndTry
  616.     EndAlias
  617.  
  618.     Alias INNER1
  619.       Try
  620.         Inner2
  621.       Except
  622.         // display "Inner1 caught Exception - an exception from Inner2"
  623.         MessageBox Inner1 caught $ExceptClass - $ExceptMsg
  624.         // re-raise the exception for Outer to catch
  625.         Raise
  626.       EndTry
  627.     EndAlias
  628.  
  629.     Alias INNER2
  630.       Raise an exception from Inner2
  631.     EndAlias
  632. * A scripted popup menu now appears when right-clicking a web hyperlink,
  633.   allowing you to either go to the URL or copy it to the clipboard. This
  634.   makes use of TMS's new OnHyperlinkPopup event.
  635. * New command: CacheBitmap <name> <hbitmap>. You can replace ViRC's
  636.   built-in TextOut images by using a 'name' of _join.bmp, _part.bmp, etc.
  637.   'hbitmap' is the value returned by $bitmap(filename.bmp).
  638. * New event: <OnCacheBitmaps>, called at startup and after
  639.   FlushBitmapCache. This is a good place to replace built-in bitmaps.
  640. * ViRC.lib will automatically replace the built-in join/quit/etc bitmaps
  641.   with any corresponding files it finds in your image path:
  642.     _join.bmp, _part.bmp, _joinign.bmp, _partign.bmp,
  643.     _quit.bmp, _nick.bmp, _mode.bmp, _topic.bmp
  644.   If you release a color scheme for 2.0rc2 with new bitmaps, you can
  645.   simply include these files in an image folder, and reference it in your
  646.   scheme file. ViRC.lib will notice when you change your image path and
  647.   automatically recache the bitmaps.+
  648. * ViRC.lib notices when you change your script path or filenames in client
  649.   setup, and automatically rehashes.
  650. --- Changed features ---
  651. * File dialog boxes ($opendialog(), etc.) now start in the current
  652.   directory.
  653. * Built-in menu trees in the script editor are now merged by default.
  654.   This means you can add items to a menu simply by, well, adding them.
  655. * The script editor shows a warning when you omit an event mask.
  656. * RightAlt+Num no longer switches windows, since right Alt is used for
  657.   typing symbols on non-U.S. keyboards. Use left Alt instead.
  658. * The server list and server import/export forms are now resizable, and
  659.   the tree views won't expand automatically if there are more than 15
  660.   items to show.
  661. * Opening server windows is faster.
  662. * String expressions can now use nested square brackets:
  663.     if [$array[$key]] == [foo]
  664.       ...
  665.     endif
  666.  
  667.     @l $x = []
  668.     if [$x] == [[]]
  669.       MessageBox Naturally!
  670.     endif
  671. --- Bug fixes ---
  672. * Fixed an array parsing bug.
  673. * MergeMenu now copies hints correctly.
  674. * Making the server hostname edit box empty, or calling /server with no
  675.   parameters, will now connect to the previous server instead of giving
  676.   an error.
  677. * The userlist loads correctly from INI files.
  678. * $listquote() now escapes strings containing tabs and CR/LF.
  679. * The script editor doesn't prompt to save when you view a <DoubleClick>
  680.   menu item without making any changes.
  681. * The script editor won't write a MenuTree block if the only item is
  682.   <DoubleClick>.
  683. * $GetWindowID() works for all window types.
  684. * <OnDCCFinished> is fired when closing a DCC chat window.
  685. * '^Msg =nick text' correctly hides any text displayed by
  686.   <OnMyQueryText>.
  687. * The DCC progress bad should appear correctly for large files.
  688. * !Application's Active property is now readable.
  689. * UltimateIRCD's "channel admin" flag (*nick) won't confuse ViRC's
  690.   nick list.
  691.  
  692. Changes since ViRC 2.0pre11:
  693. --- Additions ---
  694. * -@L command to delete local variables and local array entries. Local
  695.   variables and arrays are still deleted automatically when the routine
  696.   finishes, so this is mainly useful for removing values from local
  697.   arrays.
  698. * You can now switch between the first ten windows by pressing Alt+1
  699.   through Alt+0. Alt+1 jumps to the first window on the tab bar, Alt+2
  700.   jumps to the second, etc.
  701. * New aliases in virc.lib: /onall <command> to run a command on all
  702.   servers, /aasay <text> and /aame <text> to do /asay and /ame on all
  703.   servers.
  704. * The script editor now supports custom magic in menus.
  705. * Color and font schemes can now be saved and loaded on the
  706.   "Text windows" configuration tab. If you download schemes, save them
  707.   in your image path.
  708.   Schemes can also include image and sound folders. To distribute your
  709.   images and sounds as part of a scheme, open the scheme file with a
  710.   text editor. Add a section at the bottom:
  711.  
  712.     [Paths]
  713.     ImagePath=somename-images
  714.     SoundPath=somename-sounds
  715.  
  716.   (You don't have to include both an image path and a sound path.
  717.   Replace 'somename' with the name of your scheme.)
  718.  
  719.   Then put the scheme file (somename.colors), along with image and
  720.   sound folders (somename-images and somename-sounds), in a ZIP
  721.   archive to upload it.
  722. * New $ParamList() function to return a list of parameters passed on
  723.   ViRC.exe's command line.
  724. * Command-line support for loading scripts (-loadscript filename.vsc),
  725.   editing scripts (-editscript filename.vsc), importing server lists
  726.   (-importservers filename.vsl), opening connections from a file
  727.   (-chat filename.chat), editing connection files (-editchat
  728.   filename.chat), and deleting settings (-uninstall).
  729. * ViRC now has an installer to create icons and register file types.
  730.   The /irchyperlink alias will be called when an irc:// URL is
  731.   activated from Explorer.
  732. * You can now choose to save to an INI file from the setup wizard.
  733. * ViRC's TApplication object can now be mapped as !Application.
  734.   Useful properties: Active (boolean), ExeName (string),
  735.   Handle (HWND), HintColor (color), HintHidePause (integer),
  736.   HintPause (integer), HintShortPause (integer), ShowHint (boolean),
  737.   Title (string).
  738. * New "codeedit" script control type. A syntax-highlighting script
  739.   code editor will appear. $getsetting() returns a list of lines
  740.   in order.
  741. * New "perform on connect" script setting for networks and servers.
  742. * Inflated windows stay inflated when resizing the main ViRC window.
  743.   Clicking the maximize button of an inflated window returns it to
  744.   the size it had before it was inflated.
  745. * New default colors and built-in bitmaps.
  746. * Special cursors for hyperlinks and script links.
  747. --- Changed features ---
  748. * New-style arrays ($array[$key]) have been optimized and are now as
  749.   fast as old-style arrays. Adding or removing values may cause the
  750.   order of items in $array to change. Old-style arrays ($array.$key,
  751.   or any variable with a . in the name) are now deprecated and should
  752.   no longer be used in new code, since a future version will not
  753.   support them.
  754. * The incorrect syntax '-@ $foo $bar' no longer deletes $foo.
  755. * Server list files (.vsl) can now contain comment lines starting
  756.   with //.
  757. * The script log now shows function results.
  758. * The setup wizard has been improved.
  759. * Nonprintable characters and backslashes are no longer allowed in
  760.   variable names.
  761. * Credits sequence changed.
  762. --- Bug fixes ---
  763. * Default paths are used correctly in the configuration window.
  764. * No more I/O error when closing a reverse DCC send that is waiting
  765.   for a response from the receiver.
  766. * The script editor appears correctly on systems with large fonts.
  767. * Fixed virc.lib's DCC auto-accept settings.
  768. * Fixed winamp.vsc bug causing crashes with certain song titles.
  769. * Calling TextOut in some situations used to create a query window
  770.   called "$C"; now it is redirected to the server window.
  771. * No more 64 KB limit in INI files.
  772. * Minor bug fixes in the text scroller.
  773. * Custom magic works on the main menu.
  774. * Unused menu entries are correctly deleted; this solves a bug with
  775.   replacing menus containing custom magic.
  776. * Hyperlinks are now marked more reliably.
  777.  
  778. Changes since ViRC 2.0pre10:
  779. --- Additions ---
  780. * User-defined classes can now use <AutoGet> and <AutoSet> as generic
  781.   property handlers, which will be called if you try to read or write an
  782.   undefined property.
  783. * New client setup page for default download, upload, sound, image,
  784.   log, and script paths. Please note that the download, upload, and
  785.   log paths default to your "My Documents" directory, not the ViRC
  786.   directory.
  787. * Scripts now have a standard way to store and play sound files for
  788.   events: AddEventSound <name> "<category>" "<title>" [default <file>],
  789.   DelEventSound <name>, PlayEventSound <name>, $EventSoundList(),
  790.   $GetEventSound(<name>), $GetEventSoundFile(<name>),
  791.   SetEventSoundFile <name> <file>, $IsEventSoundSet(<name>). Items
  792.   added with AddEventSound appear on the event sounds page in client
  793.   setup. PlayEventSound can also be called as a function, returning 1
  794.   if the sound was successfully played.
  795. * New command to play sound files: PlaySoundFile <file>. This can also
  796.   be called as a function, returning 1 if the sound was successfully
  797.   played.
  798. * InternalCall now works for many event types other than TNotifyEvent,
  799.   so you can hook into ViRC's events such as OnClose and still use the
  800.   default handling. Any parameter values for the event will be taken
  801.   from variables (such as $Action for OnClose), and any output
  802.   parameters will be written back to the variables.
  803. * New command to run an alias in the current local variable context:
  804.   Chain <alias> [parameters]. All the local variables from the current
  805.   routine will be passed to the alias, and any changes made by the
  806.   alias will be visible to the current routine. This is useful for
  807.   chaining OVS event handlers:
  808.     @l $old_handler = $prop($obj.OnKeyDown)
  809.     @p $obj.OnKeyDown = _NEW_KEYDOWN $old_handler
  810.     ...
  811.     Alias _NEW_KEYDOWN
  812.       ...
  813.       Chain $1-
  814.     EndAlias
  815. * New function $ShiftKeys(), returning a set of control keys that
  816.   are currently held down. Possible keys are lshift, rshift, lctrl,
  817.   rctrl, lalt, ralt, lstart, rstart, and context. 'shift' will be
  818.   included if either shift key is down; 'ctrl', 'alt', and 'start'
  819.   work similarly.
  820. * ViRC.lib changes: Auto-connection will not be performed if you hold
  821.   Ctrl down while starting ViRC. Auto-joining will not be performed
  822.   if you hold Shift down while connecting to a server. New script
  823.   settings "Auto-accept DCC chat", "Auto-accept DCC send",
  824.   "Auto-resume DCC send", and "Dangerous file extensions". Logging menu
  825.   items on server/channel/query/chat windows.
  826. * Buttons on the tab bar are now grouped by server and window type.
  827. * New methods for TStrings: SaveToToolbar <name> <options>,
  828.   LoadFromToolbar <name>, SaveToToolbarItem <item> on <bar>,
  829.   LoadFromToolbarItem <item> on <bar>. LoadFromToolbar can be called
  830.   as a function ($stringlist.LoadFromToolbar(TB_WINAMP)) to return
  831.   the options needed to recreate the toolbar.
  832. * winamp.vsc changes: Added commands /zz, /zj, /zk, /zl. Added Winamp
  833.   toolbar. See winamp.vsc for documentation and options.
  834. * New function $ListUnique(<list>), returning the list with duplicate
  835.   items removed.
  836. * Rewritten configuration code: New option "Save to INI file" in
  837.   configuration window. The server list is now stored in a file. New
  838.   commands: SetSetting [path] <key> = <value>, SaveConfig. SetSetting
  839.   can operate on either config settings or script settings (like
  840.   $GetSetting()), but any changes will be temporary unless SaveConfig
  841.   is called afterwards to write the settings to the registry/INI file.
  842. * New command to add items to a menu tree:
  843.   MergeMenu <source> {before|after} <destination> <options>. Options
  844.   can be a space-separated list of 'addsep', 'noaddsep', 'clobber',
  845.   'noclobber', 'move', and 'nomove' (all three are turned on by
  846.   default). Addsep controls whether a separator is added between the
  847.   old items and the new items, clobber controls whether old items are
  848.   replaced by new items with the same name, and move controls whether
  849.   old items are rearranged to the order they appear in the source
  850.   menu.
  851. * The script editor now prompts to save files that have been modified.
  852. * OLE Automation support - see vircole.txt for details.
  853. * ActiveScripting blocks now have access to the current window's
  854.   Automation object ("Current", implementing IServer, IChannel,
  855.   IQuery, IDCCChat, or IWhiteboard) as well as ViRC's object
  856.   ("VisualIRC", implementing IVisualIRC).
  857. * New custom magic types for menu definitions, so items can be
  858.   enabled or disabled at runtime. Instead of a number 0..3, you can
  859.   also use '$varname' (so the item is enabled when the variable is
  860.   nonzero) or '%funcname' (calls the function with <windowname> or
  861.   <nicks> <windowname>, item is enabled when the result is nonzero).
  862.   These forms can also be used with variable or function references:
  863.     !$varname              enabled when variable is false
  864.     &$varname              enabled when the menu's regular criteria is
  865.                            met (e.g., you are opped) AND the variable
  866.                            is true
  867.     |$varname              enabled when the menu's regular criteria is
  868.                            met OR the variable is true
  869.     &!$varname             enabled when the menu's regular criteria is
  870.                            met AND the variable is NOT true
  871.     !&$varname             enabled when the menu's regular criteria is
  872.                            NOT met AND the variable is true
  873.     !|!$varname            enabled when the menu's regular criteria is
  874.                            NOT met OR the variable is NOT true
  875.     and so on.
  876. * New custom magic types for toolbar button definitions. Instead of a
  877.   state number 0..3, use state number 5 and include 'magic <token>'
  878.   before the state, where <token> is a variable or function reference
  879.   as described above. For example:
  880.      T_CHANCTL magic $enablechanctl 0 "tbchanctl.bmp" | Channel control
  881. * New command UpdateMainMenu, to apply magic to the main menu and
  882.   toolbar items. (Magic will only be applied when the command is
  883.   called.) UpdateMainToolbar is a synonym.
  884. * New function $isobject(<value>) to determine whether the value is a
  885.   valid object handle. New function $proplist(<object>) to list
  886.   properties.
  887. * You can now use the -nosplash command line parameter to disable the
  888.   splash screen.
  889. * New events: <OnMinimizeToTray> and <OnRestoreFromTray>. ViRC.lib
  890.   uses these to display a private message count while minimized.
  891. * The help menu now shows DOC files.
  892. --- Changed features ---
  893. * ViRC will not try to reconnect if you use /server to connect to a
  894.   hostname that can't be resolved, but it will try to reconnect if it
  895.   encounters an unresolvable hostname during reconnection.
  896. * The ident socket is only bound while ViRC is waiting for a server
  897.   to connect to it (unless "Answer for other programs" is enabled).
  898.   Ident should now work correctly with multiple instances of ViRC
  899.   running.
  900. * $GetPath() now accepts an argument: 'download', 'upload', 'log',
  901.   'script', 'sound', 'image', or 'virc'. $GetPath() with no argument
  902.   is the same as $GetPath(virc).
  903. * If a script file can't be found in the specified location, but it
  904.   can be found in ViRC's directory, ViRC will show a message but
  905.   won't automatically load the scripts from its directory unless you
  906.   press OK in the configuration window that appears.
  907. * The default personal script filename for a user profile is now
  908.   local-<profile>.lib. (Create new user profiles by making shortcuts
  909.   to 'ViRC.exe -user <profilename>'.)
  910. * Magic modes 1 and 2 for MT_TRAYPOPUP items now cause the items to be
  911.   enabled (or disabled, respectively) when ViRC is minimized.
  912. --- Bug fixes ---
  913. * $([foo] == [bar]) was slightly broken by the new array syntax.
  914. * Small bug with matching server entries fixed.
  915. * $GetMenuHint() and SetMenuHint are now case-insensitive.
  916. * Italic text is displayed properly with non-TrueType fonts.
  917. * Toolbars are repositioned correctly after reloading the script.
  918. * Fixed closing a server window while a $getaddress() or DNS lookup was
  919.   pending.
  920. * Toolbar buttons with mode 1 (enabled when opped) are enabled when you
  921.   join a channel and receive ops automatically.
  922. * Random/sequential reconnection option is stored correctly.
  923. * "Cancel reconnect" button appears in the correct place.
  924. * ViRC minimizes to the tray correctly when the context menu for the
  925.   taskbar icon is used.
  926. * Setting a timer for a command that uses the built-in channel tracking
  927.   (e.g., /timer 5 1 say hello) works correctly.
  928. * Redefining a toolbar to appear on fewer window types will correctly
  929.   remove it from the old windows.
  930. * Aborting DCCs now closes the file reliably.
  931. * The notify list is emptied when disconnecting from the server.
  932.  
  933. Changes since ViRC 2.0pre9:
  934. --- Additions ---
  935. * Visible controls now have the Parent property available. This could be
  936.   used to move built-in controls into a group box or tab sheet.
  937. * TListBox, TComboBox, and TListView now have an ItemText property. For
  938.   TListBox and TComboBox it's equivalent to the ItemIndex'th element of
  939.   the Items list; for TListView it's equivalent to the Caption property
  940.   of the Selected item.
  941. * Server tab buttons now show "connecting" while waiting to connect.
  942. * A gratuitous credits display is hidden in the about box.
  943. * DCC entries now stay in the list after an error occurs.
  944. * $GetDCCInfo() has two new fields: errnum and errmsg. 'state' can also
  945.   return 'error'.
  946. * New '@e' command to set one-line event handlers. For example:
  947.     @e $form.OnMouseDown = MessageBox $Button
  948.   Now when you click the form, you will see a message saying "mbLeft" or
  949.   "mbRight" depending on which button you used. Note that the $Button is
  950.   evaluated when the event handler runs, not when it's set (as with @p).
  951.   This is equivalent to:
  952.     @p $form.OnMouseDown = Eval MessageBox $$Button
  953.   ... but it makes more sense.
  954. * New <default> event for server lines that aren't handled by anything
  955.   else. New "show unrecognized server numerics" script setting, to show
  956.   the entire unrecognized line.
  957. * New associative array syntax:
  958.     @ $foo[key1] = value1
  959.     @ $foo[key2] = value2
  960.     @ $foo[key3] = value3
  961.     MessageBox $foo[key2]
  962.     -@ $foo[key1]
  963.     // when the key contains brackets, $, etc...
  964.     @l $temp = ]special characters[
  965.     @ $foo[$temp] = value4
  966.     foreach ($key, $value; $foo)
  967.       MessageBox key: $key, value: $value
  968.     endforeach
  969.     // stored array
  970.     @s $stored[key] = value
  971.     -@s $stored[key]
  972.     // local array
  973.     @l $local[key] = value
  974. * New functions for arrays: $ArrayKeys($array), $ArrayValues($array),
  975.   $ArrayLength($array). These only work with arrays created with the new
  976.   syntax as shown above.
  977. * ViRC now automatically checks for updates 5 minutes after you start it.
  978.   You can disable update checking or change settings in client setup, and
  979.   you can force it to check immediately with /checkforupdates or the
  980.   file menu item.
  981. * New functions: $URLEncode(text), $URLDecode(text). URL encoding replaces
  982.   space with '+' and all other non-alphanumerics with '%xx', where xx is
  983.   the hex code. Decoding is the opposite.
  984. * New function $MD5(text) to return an MD5 digest. The digest is a 128-bit
  985.   fingerprint of the input text, given as 32 hex digits. The chances of
  986.   two separate texts having the same MD5 digest are one in 2^128.
  987. * New function $ParseColor(string [type]) to get a color's RGB value.
  988.   <string> can be an mIRC color number (0-15), a hex color in the form
  989.   $BBGGRR, a decimal color (as returned by $prop($obj.Color)), an
  990.   event color name like ecJOIN, or a color name like clGreen.
  991.   <type> can be 'dec' to return it as a decimal color (for use with
  992.   @p $obj.Color or with TextOut) or 'hex' to return it as a hex color in
  993.   the form RRGGBB (for use with \d). 'hex' is the default.
  994. * ViRC will try to reconnect to the server if the connection is lost. You
  995.   can adjust the delay between attempts (and other settings) in client
  996.   setup. ViRC can also try other servers on the same network if enabled.
  997.   Note that disconnecting with '/raw quit' will make ViRC think the server
  998.   disconnected you, and it will try to reconnect.
  999. * New "don't hop away" server list option. If reconnection fails on a
  1000.   server with the option enabled, ViRC won't try other servers from the
  1001.   same network. However, if ViRC was trying the "don't hop away" server
  1002.   because reconnection failed on a different server, it will still hop
  1003.   away.
  1004. * ViRC's tray icon now has a customizable popup menu (MT_TRAYPOPUP).
  1005. --- Changed features ---
  1006. * <OnStart> events are now run after the toolbars are set up and the
  1007.   splash form is hidden.
  1008. * The script editor no longer saves menu items that have no code. This
  1009.   means you can add items in local.lib without having to copy all the
  1010.   code from virc.lib.
  1011. * The server debug log now contains all text that is sent or received.
  1012.   'recv' marks a received line, 'send' is a sent line, 'send_brk' is a
  1013.   sent line that is broken to avoid DCC proxies, and 'send_idle' is a
  1014.   sent line that doesn't reset $idletime(). If you use debug logging, make
  1015.   sure you edit any passwords out of your logs before you send them to
  1016.   anyone.
  1017. * Channel, query, and DCC chat window positions are now stored with an MD5
  1018.   digest of the network and channel/nickname instead of the actual plain
  1019.   text. This prevents others from looking in your registry to see who
  1020.   you've talked to, and also lets you have separate positions for the same
  1021.   channel on different networks.
  1022. * The 'News and updates' link has been removed from the about box.
  1023. --- Fixes ---
  1024. * DCC requests are always sent correctly with reverse DCC enabled. You can
  1025.   also send DCC when SOCKS is enabled, as long as reverse DCC is also
  1026.   enabled.
  1027. * No more errors when using /exit with queries or channels open.
  1028. * Major DCC bugs fixed.
  1029. * Menu definitions can now have spaces before the bitmap filename.
  1030. * Fixed hexadecimal values in expressions.
  1031. * Errors in ActiveScript language blocks are handled better.
  1032. * GetVar() in ActiveScript code now works correctly for numbered parameter
  1033.   variables.
  1034. * $getwindowid() now works in <OnCreateWindow> for all window types.
  1035. * Timers are now disabled correctly when the timer command takes longer
  1036.   to run than the timer interval.
  1037. * Importing ViRC 1.x settings now works correctly when there was no server
  1038.   list defined.
  1039. * Ending color codes now correctly clears the background color.
  1040. * Leaving the personal script filename blank is now acceptable.
  1041.  
  1042. Changes since ViRC 2.0pre8b:
  1043. --- Additions ---
  1044. * ViRC can now autoload more than one script at a time - a master script
  1045.   (virc.lib), a personal script (local.lib), and multiple add-on scripts
  1046.   (winamp.vsc, etc.). You can now install an add-on script simply by
  1047.   adding it to the list on the configuration window's Scripts page and
  1048.   rehashing.
  1049. * The script editor now has a "New" button, and loads the personal script
  1050.   by default.
  1051. * New 'server list' button in toolbars.vsc.
  1052. * New channel list window. Try '/list *mp3*' or just '/list'. The list
  1053.   can be loaded and saved to a file, using the same format as mIRC.
  1054.   Right-click on a channel to get a menu.
  1055. * New /who window, accessible with /wwho or /windowedwho. Try '/wwho' to
  1056.   get a list for the active channel, or '/wwho #virc' for another
  1057.   channel. You can also double-click on a channel in the /list window to
  1058.   see who's on.
  1059. * '/clear -h' or '/clear #virc -h' can now be used to clear the input box
  1060.   history.
  1061. * The server notify list and channel nick list can now be resized by
  1062.   dragging the border between the output pane and list box.
  1063. * Scripts can now create tray icons with the TTrayIcon class. Properties:
  1064.   - Active: Boolean
  1065.   - Hint: string
  1066.   - Icon: TIcon
  1067.   - PopupMenu: TPopupMenu
  1068.   Events:
  1069.   - OnClick
  1070.   - OnDblClick
  1071.   - OnRightClick ($Shift, $Button, $X, $Y)
  1072. * If you move ViRC to a new directory and it can't find the scripts (the
  1073.   old paths are saved in the registry), it will look in the new location
  1074.   of ViRC.exe. If it finds them there, it will load the files and update
  1075.   the settings.
  1076. * Scripts can now use TListView, which is the control used in the ban
  1077.   list, /who list, and Explorer windows. The actual implemented classes
  1078.   are TListView, TListItem, TListItems, TListColumn, TListColumns, and
  1079.   TImageList. See ovs.txt.
  1080. * Scripts can use TCanvas to draw on forms and some controls. This also
  1081.   means owner-draw list boxes and list views are available.
  1082. * A color palette now appears when you start typing a color with ctrl-K.
  1083. * Attribute codes (^B, ^K, etc.) now work for the real name and default
  1084.   messages settings in configuration, and for the topic in channel
  1085.   control. Scripts can use TInputCombo for a combo-box that allows
  1086.   attributes.
  1087. * New reverse DCC support for firewalls, compatible with mIRC. Enable
  1088.   "Use reverse DCC" on the DCC settings page. Note: This won't work if
  1089.   both users are behind different firewalls.
  1090.   Special note to Khaled: Please put more thought into your next
  1091.   invention.
  1092. * When reverse DCC is enabled, ViRC will attempt to trick some proxies
  1093.   that intercept DCC requests (specifically, the one at my apartment
  1094.   complex that inserts the wrong address).
  1095. * The setup wizard is now implemented. Choose "I'm new to IRC and I
  1096.   want detailed help" on the import settings form for new users.
  1097. * New function: $SameNick(nick1 nick2). Considers [ the same as {,
  1098.   \ the same as |, and ] the same as }, like ircd.
  1099. * New commands/functions for DCC management:
  1100.     $DCCList() returns a list of DCC list entries
  1101.     DCC Accept <entry> [filename]
  1102.     DCC Resume <entry> <offset> [filename]
  1103.     DCC Reject <entry>
  1104.     $GetDCCInfo(<entry> <key>) where key is chatform (returns a mapped object
  1105.       handle), chatwin (returns a window name like =1), filename, id, kind
  1106.       (chat/send/tsend/get/tget), mynick, myport, nick, origfilename,
  1107.       remoteaddr, remoteport, reverse, reversetoken,
  1108.       server (returns the server ID), servername, socket (returns a mapped
  1109.       object handle), startpos, starttime (compare to $mtime()), state 
  1110.       (request/connecting/connected/waiting/resuming/socks), totalsize,
  1111.       transferred, or whiteboardform (returns a mapped object handle)
  1112.   Note that when an incoming request is accepted, the request entry is deleted
  1113.   and a new entry is created to connect. Firewall DCC entries are similarly
  1114.   recreated during connection.
  1115. * New events for DCC:
  1116.     <OnDCCConnect>  ($0 = chat/send/tsend/get/tget, $1 = DCC entry ID)
  1117.     <OnDCCFinished> ($0 = chat/send/tsend/get/tget, $1 = DCC entry ID,
  1118.                      $2 = socket error number, $3- = error message.
  1119.                      error number is 0 if completed or -1 if aborted.)
  1120. * Ident and DCC socket errors are now shown on the main status bar.
  1121. --- Changed behavior ---
  1122. * Menu bitmaps will now be made square when they're loaded, by setting
  1123.   the width to be the same as the height. This means you can use the
  1124.   same bitmaps for menus and toolbars if the toolbar bitmaps have
  1125.   disabled versions.
  1126. * New users now have "strip attributes from logs" turned on by default.
  1127. * ViRC no longer freezes while looking up the server's IP address.
  1128. * Menu items aren't forgotten when the menu tree is updated, so you don't
  1129.   have to duplicate the code for the entire menu just to add one item.
  1130. * No more AddNickToChan/RemoveNickFromChan errors.
  1131. --- Fixes ---
  1132. * The tile and cascade buttons in toolbars.vsc now work correctly.
  1133. * The tray icon refreshes itself automatically if Explorer crashes.
  1134. * The server toolbar is correctly updated after an error causes the
  1135.   server to disconnect.
  1136. * The internal QUIT event now works correctly if the server doesn't send
  1137.   a reason.
  1138. * The new TDCC handshake is now actually implemented.
  1139. * Continuous backgrounds work correctly with toolbars, and turning
  1140.   continuous backgrounds off works as expected.
  1141. * ViRC now looks in its own directory for menu/toolbar images if no path
  1142.   is given.
  1143. * Incoming messages and notices directed to the ops or voices of a channel
  1144.   (@#virc, +#virc, @+#virc, etc.) are now shown in the correct window.
  1145. * Logging for nicks with \ in them works correctly.
  1146. * The ident server is now much better behaved.
  1147. * IAL expiration should be faster in large channels.
  1148. * Nicks are now compared correctly ('{' is the same as '[', etc.).
  1149.  
  1150. Changes since ViRC 2.0pre8:
  1151. --- Additions ---
  1152. --- Changed behavior ---
  1153. * Exceptions caused by scripts are handled differently. Functions that
  1154.   raise exceptions will return an appropriate message.
  1155. * The upgrade message will now go away even if the configuration can't be
  1156.   saved completely.
  1157. --- Fixes ---
  1158. * Menu bitmaps work correctly.
  1159. * Class definitions with blank lines work correctly.
  1160. * Switching between OVS-created MDI children doesn't give errors.
  1161. * Destroy/SafeDestroy no longer explicitly close forms. This will prevent
  1162.   errors when a form's OnClose handler destroys the form.
  1163. * Calling methods of user-defined classes no longer loses local variables.
  1164. * List items quoted with angle brackets are now extracted correctly.
  1165. * '/dns  www.yahoo.com', with an extra space after /dns, works correctly.
  1166.  
  1167. Changes since ViRC 2.0pre7:
  1168. --- Additions ---
  1169. * RGB color codes are now supported, a la Bersirc. Press ^L (or use \d
  1170.   in a script), followed by a RRGGBB hex color code (like HTML). A comma
  1171.   separates the foreground and background colors.
  1172. * ViRC can now be set to recognize ^V as inverse colors instead of italics.
  1173.   It will always recognize ^R as inverse, and now also always recognizes ^]
  1174.   ($char(29) or \s) as italics. Pressing control-N or control-R will insert
  1175.   the correct italics or reverse code whether compatibility mode is on or off.
  1176.   New users will default to new color mode, existing users will default to
  1177.   compatibility mode.
  1178. * New text window options: "old italic compatibility mode" and "script link
  1179.   merge mode".
  1180. * New versions of a few string functions to allow tokens/substrings with
  1181.   spaces (just quote the token as a list item): $StrPosEx(), $StrPosFromEx(),
  1182.   $StrTokLEx(), $StrTokREx(), $RStrPosEx(), $RStrTokLEx(), $RStrTokREx().
  1183. * New versions of pattern matching functions to allow patterns with spaces
  1184.   (quote the *text* as a list item): $WildMatchEx(), $WildMatchCaseEx(),
  1185.   $GlobMatchEx(), $GlobMatchCaseEx().
  1186. * Ctrl-enter can be used to type multiple lines in the input box and send
  1187.   them all at once.
  1188. * The script editor gives a warning when it loads a file where code between
  1189.   aliases/events/menus will be lost.
  1190. * /wallops has been added as a built-in command.
  1191. * New variable $exebuild to return the build number of ViRC.exe. This can
  1192.   be found by opening ViRC.exe's properties and looking at the version page;
  1193.   if $build is 200 and $exebuild is 42, the file version will be 2.0.0.42.
  1194. * New command: Inflate [window]. This makes the window as big as possible
  1195.   without maximizing it, so switching windows will be faster. If no window
  1196.   name is given, all windows will be inflated. Clicking a window's maximize
  1197.   button will now inflate it instead of maximizing (turn off "maximize button
  1198.   inflates" to go back).
  1199. * New function $ListCat(<item1> .. <itemN>) to append list items. This will
  1200.   be faster than appending them as strings when the new script engine is in.
  1201. * Screen information can now be retrieved by mapping !Screen: see the
  1202.   properties ActiveControl, ActiveForm, DesktopHeight, DesktopLeft,
  1203.   DesktopTop, DesktopWidth, Height, Width, HintFont, IconFont, MenuFont,
  1204.   and PixelsPerInch.
  1205. * ViRC will strip out the PGP headers when loading a script that has been
  1206.   digitally signed with PGP. It will not verify the signature itself, though.
  1207.   If you sign a script, make sure to keep the original script text intact -
  1208.   you can do this by opening it in a text editor and signing it with PGPtray,
  1209.   *not* by using the PGP right-click menu in Explorer. Make sure you have
  1210.   "word wrap clear-signed messages" turned off in PGP's email options.
  1211. * DCC Whiteboard is back, and much more powerful. See vircwb.txt for details
  1212.   on how to control the whiteboard from scripts. This whiteboard is
  1213.   compatible with ViRC 1.x's whiteboard, but some features will be unavailable
  1214.   (the 1.x user may see "CAN use-wb2" as ViRC 2 tries to negotiate this).
  1215. * New commands/functions to interact with other windows:
  1216.   $FindWindow("class" ["title"]), $SendMessage(<hwnd> <msg> <wparam> <lparam>),
  1217.   $GetWindowText(<hwnd>), SetWindowText <hwnd> <text>.
  1218. * New commands/functions to allocate and edit memory, intended for use with
  1219.   SendMessage or DLLs (ViRC may crash if you don't know what you're doing):
  1220.   $GetMem(size), FreeMem <ptr>, PokeLong <ptr> <offset> <value>, and
  1221.   $PeekLong(<ptr> <offset>). PokeWord, PokeByte, PeekWord, and PeekByte are
  1222.   also available, and PokeString/PeekString can be used for C-style strings.
  1223. * New persistent DLL support with $LoadDLL(<filename>), FreeDLL <filename>,
  1224.   and an extended $DLL(). See vircdll.txt for details, or fpu.dpr for an
  1225.   example.   Note to DLL authors: although you can have mIRC-style functions
  1226.   and persistent functions with the same name in the same DLL, persistent
  1227.   calls use different function names and parameter types.
  1228. * Built-in timestamping for text windows. Turn on the "show timestamps"
  1229.   option to see them by default, or right-click in a window to turn it on
  1230.   and off. Timestamps are saved even when timestamping is turned off, and
  1231.   toggling timestamp display affects lines that have already been added,
  1232.   as in AIM. 
  1233. * The script editor now has syntax hiliting and auto-indent.
  1234. * Custom toolbar support, using Toolbar..EndToolbar blocks (similar to menu
  1235.   trees). See toolbars.vsc.
  1236. * virc.lib now includes responses for CTCP USERINFO, FINGER, SOURCE, and
  1237.   CLIENTINFO, and an /sv command to brag about your client version.
  1238. * These server form properties can now be used in scripts: Hostname,
  1239.   Nick, Ident, IRCName, Servername (read only), Port (read only), Connected
  1240.   (read only), ConnectedAt (read only), LastSent (read only). These channel
  1241.   form properties can also be used: ServerID (read only), Server (TForm),
  1242.   Channel, JoinString (read only), Mode, Key (read only), Limit (read only),
  1243.   Topic, TopicSetter, TopicTime, TopicHistory (TStringList).
  1244. * Menu tree definitions can now contain an optional bitmap filename,
  1245.   surrounded by double-quotes before the caption.
  1246. --- Changed behavior ---
  1247. * The mouse wheel code has been changed. If your wheel hasn't been working
  1248.   properly (*cough* Gnowknaym), try turning off the "Mouse wheel fix" option.
  1249. * 'Nop' event handlers in OVS now work the same way as they did in 1.x; that
  1250.   is, it sets a handler that does nothing. To actually unset an event handler
  1251.   (as 'Nop' did in pre7), use 'Nil' instead.
  1252. * $ListReplace() now creates empty items in between:
  1253.   $ListReplace(2 2 foo a b c) => a b foo
  1254.   $ListReplace(2 2 foo a) => a "" foo
  1255. * /kb now deops the victim.
  1256. * Internal socket error handling has changed.
  1257. * The configuration window now appears the first time running ViRC.
  1258. * <OnConnect> events now get the server name in $0 and the network name in $1.
  1259.   $1 will be () if there is no matching network.
  1260. * TDCC now works with a parameter at the end of CTCP DCC SEND, instead of
  1261.   using CTCP DCC TSEND. This means that if you TDCC send to an mIRC user, it
  1262.   will go through as regular DCC (with send-ahead) instead of being ignored.
  1263.   Turn on "use old TDCC handshake" to go back.
  1264. * Tab characters are no longer copied to the clipboard.
  1265. * 'true' and 'false' can be used in expressions to mean 1 and 0 respectively.
  1266.   Among other things, this means you can do 'if $prop($checkbox.Checked)'.
  1267. * A default value can be specified to AddScriptControl:
  1268.   AddScriptControl config edit "Auto join:" autojoin = #virc
  1269. * Commands sent in the background by ViRC (such as ISON commands for the
  1270.   notify list) will no longer reset $idletime(). Use 'Quote -idle <text>' or
  1271.   'Raw -idle <text>' to do this from scripts.
  1272. * Existing aliases, events, and toolbars will now be removed from memory
  1273.   before rehashing the script (with /rehash or the script editor).
  1274. * Aliases are now stored in a hash table rather than a slow sequential list.
  1275. --- Fixes ---
  1276. * Focus for newly created windows is now correct again.
  1277. * Clicking empty spots on the tab bar no longer causes it to grow. Closing
  1278.   the first window no longer leaves an extra separator.
  1279. * The script editor's "this script loads" list no longer includes
  1280.   files that don't exist.
  1281. * "%%" and "*%" in patterns will now work as expected.
  1282. * Deleting items in the script editor doesn't break the last item.
  1283. * Rearranged virc.lib again, it's now completely safe to edit from ViRC.
  1284. * TextOutBitmap -nohilite works correctly.
  1285. * Variables can now contain $char(0).
  1286. * <OnDCCRequest> event handling is improved.
  1287. * Hexadecimal values ($$a40c) work in expressions again.
  1288. * Text windows no longer scroll to the bottom when they are resized.
  1289. * The tab bar no longer appears when it's empty.
  1290. * Menu items now run in the correct channel.
  1291.  
  1292. Changes since ViRC 2.0pre6:
  1293. * New window tab bar. This one docks at all four sides, puts all the
  1294.   tabs on one bar, and automatically updates the tab icons if a script
  1295.   changes a form's icon (not just for TTabbedForm).
  1296. * New options: "no separators on window tab bar", "hide window tab bar",
  1297.   "automatically show DCC list" (for incoming or outgoing requests).
  1298. * A channel control dialog is in. Use /ChannelControl [channel] or double-
  1299.   click in the channel window. It can be mapped as !ChannelControl.
  1300. * New command: /exec <program> <parameters>.
  1301. * The script editor no longer loses <DoubleClick> menu items. It's also
  1302.   stay-on-top instead of modal, and it will go back to the same file
  1303.   and item when it's closed and reopened. It can be mapped as
  1304.   !ScriptEditor.
  1305. * /dde is fixed and can now poke data as well as reading and executing.
  1306. * ViRC now has a DDE server. See vircdde.txt.
  1307. * If ViRC can't load the default script, it will bring up the config form
  1308.   so the script path can be corrected, then quit.
  1309. * $isdccchatting() now accepts a leading equal sign (=1 or =Atrox).
  1310. * Only the most specific <OnNewDCCChatText> event will be fired, unless
  1311.   FallThrough is used. Use 'FireEvent -one' to fire your own events
  1312.   this way.
  1313. * Text scroller fixes: gaps between bold and non-bold text are gone,
  1314.   ^R now correctly draws the background color.
  1315. * The help menu has descriptions for the included files, and the
  1316.   scripting help files are on a submenu.
  1317. * /^ no longer causes text display to be stuck off.
  1318. * Script engine fix: an OVS event handler that sets a new handler for
  1319.   the same event on the same object will no longer cause access violations.
  1320. * TInputMemo is now available in OVS - it's like TMemo but it handles
  1321.   attribute keys (^B, ^K, etc) and attribute pasting. TForm's OnClose event
  1322.   is also supported. Set $Action to caNone, caHide, caFree, or caMinimize.
  1323. * The DCC list's position is saved and loaded correctly.
  1324. * New properties for channel windows: TopicSetter (string), TopicTime 
  1325.   (unixtime), and TopicHistory (TStringList).
  1326. * New method for TMonkeySex: GetText(). Returns all the text in the control.
  1327. * ViRC.lib has been rearranged so that the script editor won't lose the
  1328.   active nicks/modes code.
  1329. * New function: $UnixTimeOf(dd/mm/yy hh:mm[:ss] [am/pm])
  1330. * $DecodeInterval() and $DecodeMInterval() now accept a second parameter, a
  1331.   format string containing characters w, d, h, m, s. The default format is
  1332.   'dhms'. Lowercase characters are optional fields, uppercase characters
  1333.   are required fields.
  1334.     $decodeinterval(123 hms) => 2 minutes 3 seconds
  1335.     $decodeinterval(123 HMS) => 0 hours 2 minutes 3 seconds
  1336.     $decodeinterval(123 hm) => 2 minutes
  1337.     $decodeinterval(123 h) => 0 hours
  1338. * The controls on server/channel/query/chat forms are now in their own
  1339.   panels (OutputPanel, InputPanel, NotifyPanel, NickListPanel). This should
  1340.   make it easier to fit new controls in.
  1341.  
  1342. Changes since ViRC 2.0pre5:
  1343. * VSInterp fixes: '@p $obj.Items.CommaText' wouldn't work, even though
  1344.   the property could be retrieved. RemoveFromSetProp was broken.
  1345. * New functions: $getmode(), $gettopic(), $getkey(), $getlimit().
  1346. * New "keep channels open when dropped" option.
  1347. * New script editor. Right-click on the tree to add or delete items.
  1348.   Remember that ViRC 2 load scripts from a file, not the registry - the
  1349.   editor works on files, not a "working copy" of the script as in 1.x.
  1350.   The header and footer appear before and after the script in the file,
  1351.   respectively; don't define aliases, events, or menus in the header or
  1352.   footer. The editor will load any ViRC script file, but if you load a
  1353.   file that wasn't created with the editor, you'll lose everything that
  1354.   appears between definitions (comments before events, etc.). Comments
  1355.   should be put in the header/footer or inside definitions.
  1356. * Friendlier welcome/"import settings" dialog.
  1357. * /load will now default to looking in the ViRC directory if no path is
  1358.   given.
  1359. * The following built-in commands no longer display text: /say, /msg,
  1360.   /notice, /ctcp, /rctcp, /me, /desc. Instead, they fire script events:
  1361.   <OnMyChanText>, <OnMyPrivMsg>, <OnMyNotice>, <OnMyCTCP>, <OnMyRCTCP>,
  1362.   <OnMyChanAction>, <OnMyPrivAction>, <OnMyQueryText>, <OnMyQueryAction>.
  1363.   $0 is the target or window, $1- is the text. The events will be fired
  1364.   even if the text display is suppressed with the ^ prefix. DCC chat uses
  1365.   the same events as queries (this is the only time $N can be used on the
  1366.   global interpreter). $C is set to the target for channel and query events,
  1367.   and the active window for the others.
  1368.  
  1369. Changes since ViRC 2.0pre4:
  1370. * New "continuous backgrounds" option. This causes each window's background
  1371.   image to be tiled from the same starting point.
  1372. * A wallpaper image can now be displayed behind the child windows. Combine
  1373.   this with continuous backgrounds for an interesting effect.
  1374. * Numeric operators are now left-associative, like they should be: $(1-2+3)
  1375.   returns 2 ((1-2)+3), instead of -4 (1-(2+3)).
  1376. * $notify() no longer displays text in the active window when used as a
  1377.   function.
  1378. * The mouse wheel should now work again. Moving the wheel over the nick list
  1379.   will scroll the list; moving it anywhere else will scroll the output pane.
  1380. * Channel window titles are now only set to the first 100 characters of the
  1381.   caption. This should prevent access violations in channels with very long
  1382.   topics.
  1383. * New DCC options: "Force DCC IP address" and "force port range" (for
  1384.   incoming connections only). This is useful if you're behind a firewall or
  1385.   NAT (aka Internet Connection Sharing). The IP address will be evaluated
  1386.   if specified, so you can point it to a file on your NAT server:
  1387.     $readline(1 $noattribs(\\win2kbox\c\currentip.txt))
  1388. * Instead of /command, you can now also type //command (to evaluate it
  1389.   first) or ///text (to evaluate some text and show it in a message box).
  1390. * /DNS will now accept a nick. If you have a hostname that looks like a
  1391.   nickname (no dots, doesn't start with a number), use /dns *host to
  1392.   prevent this.
  1393. * New TSockets method: SListenRange(lowport highport). Attempts to listen
  1394.   on any port within the range, returning the port if successful, or 0
  1395.   if not.
  1396. * New "auto connect to servers" script setting. Set this to a
  1397.   comma-separated list of servers to connect to when you open the client.
  1398. * Updated script documentation is included.
  1399.  
  1400. Changes since ViRC 2.0pre3:
  1401. * Logging paths containing \b, \i, \u, etc. will now work correctly.
  1402. * OnServer works on server 16.
  1403. * Text scroller updates:
  1404.   - Multiple lines of text are copied to the clipboard correctly.
  1405.     Attributes are also terminated at the end of the selection.
  1406.   - TextOut bitmaps are drawn transparently. Any pixels that are the same
  1407.     color as the bottom-left corner will be transparent.
  1408.   - Background images are available again.
  1409.   - A lock icon is now displayed in the bottom-right corner when a window is
  1410.     scrolled up, indicating that new lines will not be visible as they are
  1411.     added.
  1412. * DLL calls are now supported. Use '/dll foo.dll funcname data' or
  1413.   $dll(foo.dll funcname data), surrounding the filename with quotes if
  1414.   necessary. The same format as mIRC's DLLs is used:
  1415.     type
  1416.       TDLLCall = function (Main, Active: HWND; Data, Params: PChar; Show,
  1417.          NoPause: BOOL): Integer stdcall;
  1418.   The Params buffer is initialized to "ViRC 200", where 200 is the current
  1419.   ViRC build. A return code of 0 (halt script) is treated the same as 1
  1420.   (continue script).
  1421. * The script log form can be mapped as !ScriptLog, when enabled.
  1422. * New function: $striplinks(). This only strips hyperlinks and script links;
  1423.   $stripattrs() does neither.
  1424. * Links are now correctly stripped from logs.
  1425. * Built-in timers:
  1426.   /timer [timername] seconds repeats command
  1427.   /mtimer [timername] millisecs repeats command
  1428.   /timers ['all']
  1429.   /untimer timername
  1430.   $timerexists(timername)
  1431.   $timerlist([serverid])
  1432.   $gettimer(timername) => millisecs repeats server command
  1433.  
  1434.   A "repeats" value of 0 means the timer repeats forever. Timer names are
  1435.   shared across all servers, and any timers created on a server are deleted
  1436.   when that server is closed. Timer names may not start with a digit. If the
  1437.   timer name is omitted in /timer or /mtimer, an available name will be
  1438.   generated automatically. $timer() and $mtimer() can be used as functions,
  1439.   which will return the name of the newly created timer. Commands will not be
  1440.   evaluated when they are run (if you want it to happen, use Eval).
  1441.  
  1442. Changes since ViRC 2.0pre2:
  1443. * Script link colors are now averaged correctly.
  1444. * 'TextOut -nohilite' (or TextOutBitmap -nohilite) can be used to prevent
  1445.   the window tabs from lighting up.
  1446. * 'DNS hostname' now correctly performs the reverse lookup instead of just
  1447.   repeating the hostname you supplied, and only shows it if the result of
  1448.   the reverse lookup is different from the supplied hostname.
  1449. * Part messages are now handled correctly. This may eliminate AddNickToChan
  1450.   errors.
  1451. * \L and \S are now stripped from logs when attribute stripping is turned on.
  1452. * A splash screen is now displayed as ViRC starts.
  1453. * #172 is now handled correctly in patterns, as is % followed by * or #172.
  1454. * Punctuation is now stripped from the end of URLs more reliably.
  1455. * Variables removed by mask (with '-@ $foo.*' or when local variables are
  1456.   removed) are now matched case-sensitively. This is available to scripts as
  1457.   $wildmatchcase().
  1458. * $new() now works correctly if there is more than one space between 'ownedby'
  1459.   or 'position' and its argument.
  1460. * The Active, ActiveMDIChild, FormState, ModalResult, and TileMode properties
  1461.   of TForm are now available.
  1462. * Destroying an object from one of its event handlers will now work in *some*
  1463.   cases. Which ones work is dependent on the internals of Windows and the VCL.
  1464.   The command 'SafeDestroy' has been added which will always work, but won't
  1465.   actually destroy the object until the event handlers finish running.
  1466. * $mapobject(#virc:WindowTab) can now be used to find the button on the tab
  1467.   bar corresponding to a given window.
  1468. * $globmatch() and $globmatchcase() are now available, which only use '*' and
  1469.   '?' as wildcards. $maskmatch() is the same as $globmatch().
  1470. * New DCC config options: send ahead and block size.
  1471.  
  1472. Changes since ViRC 2.0pre1:
  1473. * TextOut on the global interpreter will now display to the active window.
  1474. * $?="" now returns INPUT_CANCELLED if the user presses Cancel.
  1475. * ViRC will no longer attempt to send data to the server from an
  1476.   <OnDisconnect> event.
  1477. * <OnCreateWindow> will now be fired with "TDCCChatForm =nick =1" for DCC
  1478.   chat forms (with the appropriate =ID in $2).
  1479. * New functions to get the nicks involved in a DCC chat: $LocalNick(=ID),
  1480.   $RemoteNick(=ID).
  1481. * Objects created with OVS are no longer freed by the interpreter when it is
  1482.   destroyed - this fixes access violations, 100% CPU usage, and so on when
  1483.   closing ViRC.
  1484. * Some more 1.x settings are now imported as script settings.
  1485. * Kick/KB messages and exit/X messages are now evaluated as in 1.x.
  1486. * New function: $IsA(<obj> <class>).
  1487. * RPL_UMODEIS events with a colon before the user mode are now handled
  1488.   correctly.
  1489. * Script link aliases now get $X, $Y, $Shift, and $Button, just like
  1490.   OnMouseDown handlers. They also get $Text (the visible text of the link)
  1491.   and $ScreenX and $ScreenY (the screen coordinates of the mouse click,
  1492.   suitable for use with TPopupMenu.Popup).
  1493. * A form can now be destroyed from one of its event handlers. However, other
  1494.   controls should not be.
  1495. * $UnixTime() is back to using 32-bit numbers. This prevents uncommon but
  1496.   bizarre flaws with the 64-bit numbers, such as all unixtimes being off by
  1497.   136 years.
  1498. * Server list changes: New server entries are now saved correctly the first
  1499.   time. You can now choose which servers and networks to export/import.
  1500.   Importing is now implemented.
  1501. * The join and part bitmaps have been changed to a white arrow on a red
  1502.   background, which should be easier on the eyes.
  1503. * Object handles are now shared between interpreters.
  1504. * New method: TMenu.LoadFromMenuTree. This creates menu items to match the
  1505.   menu tree, and puts their handles in the local _item array; for example,
  1506.   an item named M_CTCPVERSION will be created with its handle in
  1507.   $_item.M_CTCPVERSION. Note that OnClick handlers are not set up for these
  1508.   items.. clicking them will not make anything happen by default.
  1509. * MenuTree..EndMenuTree can now be used to define custom menu trees by giving
  1510.   a non-standard name. They will not be used by ViRC and cannot be used with
  1511.   MenuItem..EndMenuItem; they are intended for use as shown above.
  1512. * AppendText now creates the file if it doesn't already exist.
  1513. * New commands: ShowScriptLog,
  1514.   FireMenuItem [> channel] <item> on <tree> [= parameters].
  1515. * Ident requests are now answered with a CRLF at the end, which should make
  1516.   ident work with more servers.
  1517. * The main menu no longer forgets all the hints and items when the menu tree
  1518.   is changed.
  1519. * $prebuild can now be used to find the current prerelease version.
  1520. * TMonkeySex's events can now be set:
  1521.   OnClick, OnDblClick: gets $Sender
  1522.   OnCopyText, OnHyperlink, OnLogging: gets $Sender and $Text
  1523.   OnScriptLink: gets $Sender, $Command, $Text, $Button, $Shift, $X, $Y
  1524. * The default script link color has been changed. Script links are now
  1525.   displayed using the average between the regular text color and the script
  1526.   link color.
  1527. * ViRC.lib now generates script links, which you can turn on and off with the
  1528.   checkboxes on the script settings tab. "Active nicks" brings up the nick
  1529.   list popup when you right-click a nick, "Active hosts" runs a DNS lookup
  1530.   on a hostname when you double-click it, "Active modes" lets you undo a mode
  1531.   change by right-clicking it, and "Active invites" lets you join a channel
  1532.   when you're invited by double-clicking it.
  1533. * Hyperlinks and script links are now stripped before a TextOut to a
  1534.   TRichEdit.
  1535. * Magic is now properly applied to channel nick list popups.
  1536.  
  1537. Changes since ViRC 2.0pre-1:
  1538. * Event masks like "% FOO" will now match either "xyz FOO" or "xyz FOO bar",
  1539.   but not "xyz FOOABC"; that is, the line from the server can contain extra
  1540.   words at the end that aren't in the mask. $wildmatch() still works as usual.
  1541.   You can get the same effect from $wildmatch() by putting an alt-0172 at the
  1542.   end of your pattern.
  1543. * $currentserver_activewindow() is now an alias for $activewindow().
  1544. * TTrackBar and TNashButton are now available for scripts to use.
  1545. * New commands: FlushIAL, SetInputLine.
  1546. * New functions: $GetInputLine(), $MapProp().
  1547. * New syntax to uncache one bitmap: FlushBitmapCache <filename>
  1548. * ViRC 1.x user/server lists are now imported.
  1549. * New "timestamp logs" option.
  1550. * The version info on virc.exe is fixed.
  1551. * The script log window can now be resized, and right-clicking on it will let
  1552.   you change the buffer size.
  1553.